﻿using System;
using System.Collections.Generic;
using System.Xml;
using System.Text;

namespace Cartography.Desktop
{
    class classManejadorXMLEdificios
    {

        private XmlDocument doc;
        private string pathData, nombre;
        public classManejadorXMLEdificios(string pathData, string nombre)
        {
            this.pathData = pathData + "\\PointsOfInterest\\"+nombre+".xml";
            this.nombre = nombre;
            doc = new XmlDocument();
            try
            {
                doc.Load(this.pathData);
            }
            catch
            {
                XmlTextWriter xmltw = new XmlTextWriter(this.pathData, Encoding.UTF8);
                xmltw.Formatting = Formatting.Indented;
                xmltw.WriteStartDocument();
                xmltw.WriteStartElement("PointsOfInterest");
                    xmltw.WriteElementString("Name", this.nombre);
                    xmltw.WriteElementString("Zoom", "8");
                    xmltw.WriteStartElement("Edificios");
                    xmltw.WriteEndElement();
                xmltw.WriteEndElement();
                xmltw.WriteEndDocument();
                xmltw.Close();        
                doc.Load(this.pathData);
            }
        }
        public void escribirXML(string nombre, string direccion, string comuna, string altura, string pisos, string habitantes, Cartography.Desktop.LatLon[] coordenadas, Cartography.Desktop.LatLon centroide, 
            LatLon redSeca, LatLon redInerte, LatLon viaEvacuacion, XmlNode infoEmergencia) 
        {
            XmlNode edificios = doc.SelectSingleNode("PointsOfInterest/Edificios");
            XmlNode newEdificio = doc.CreateNode(XmlNodeType.Element, "Edificio", null);
            XmlNode newNombre = doc.CreateNode(XmlNodeType.Element, "Nombre", null);
            XmlText categoryText = doc.CreateTextNode(nombre);
            newNombre.AppendChild(categoryText);
            newEdificio.AppendChild(newNombre);

            XmlNode newDireccion = doc.CreateNode(XmlNodeType.Element, "Direccion", null);
            categoryText = doc.CreateTextNode(direccion);
            newDireccion.AppendChild(categoryText);
            newEdificio.AppendChild(newDireccion);

            XmlNode newComuna = doc.CreateNode(XmlNodeType.Element, "Comuna", null);
            categoryText = doc.CreateTextNode(comuna);
            newComuna.AppendChild(categoryText);
            newEdificio.AppendChild(newComuna);

            XmlNode newAltura = doc.CreateNode(XmlNodeType.Element, "Altura", null);
            categoryText = doc.CreateTextNode(altura);
            newAltura.AppendChild(categoryText);
            newEdificio.AppendChild(newAltura);

            XmlNode newPisos = doc.CreateNode(XmlNodeType.Element, "Pisos", null);
            categoryText = doc.CreateTextNode(pisos);
            newPisos.AppendChild(categoryText);
            newEdificio.AppendChild(newPisos);

            XmlNode newHabitantes = doc.CreateNode(XmlNodeType.Element, "Habitantes", null);
            categoryText = doc.CreateTextNode(habitantes);
            newHabitantes.AppendChild(categoryText);
            newEdificio.AppendChild(newHabitantes);

            XmlNode newCentroide = doc.CreateNode(XmlNodeType.Element, "Centroide", null);
            XmlNode newLatitudCentroide = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
            categoryText = doc.CreateTextNode(centroide.Latitude.ToString().Replace(",","."));
            newLatitudCentroide.AppendChild(categoryText);
            newCentroide.AppendChild(newLatitudCentroide);

            XmlNode newLongitudCentroide = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
            categoryText = doc.CreateTextNode(centroide.Longitude.ToString().Replace(",", "."));
            newLongitudCentroide.AppendChild(categoryText);
            newCentroide.AppendChild(newLongitudCentroide);
            newEdificio.AppendChild(newCentroide);

            //-------------- Red Seca-------------------

            XmlNode newRedSeca = doc.CreateNode(XmlNodeType.Element, "RedSeca", null);
            XmlNode newRedSecaLatitud = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
            categoryText = redSeca.Latitude!=0 ? doc.CreateTextNode(redSeca.Latitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newRedSecaLatitud.AppendChild(categoryText);

            XmlNode newRedSecaLongitud = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
            categoryText = redSeca.Longitude != 0 ? doc.CreateTextNode(redSeca.Longitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newRedSecaLongitud.AppendChild(categoryText);

            newRedSeca.AppendChild(newRedSecaLatitud);
            newRedSeca.AppendChild(newRedSecaLongitud);
            newEdificio.AppendChild(newRedSeca);

            //-------------- Fin Red Seca-------------------

            //-------------- Red Inerte-------------------

            XmlNode newRedInerte = doc.CreateNode(XmlNodeType.Element, "RedInerte", null);
            XmlNode newRedInerteLatitud = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
            categoryText = redInerte.Latitude != 0 ? doc.CreateTextNode(redInerte.Latitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newRedInerteLatitud.AppendChild(categoryText);

            XmlNode newRedInerteLongitud = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
            categoryText = redInerte.Longitude != 0 ? doc.CreateTextNode(redInerte.Longitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newRedInerteLongitud.AppendChild(categoryText);

            newRedInerte.AppendChild(newRedInerteLatitud);
            newRedInerte.AppendChild(newRedInerteLongitud);
            newEdificio.AppendChild(newRedInerte);

            //-------------- Fin Red Inerte-------------------

            //-------------- Via Evacuacion-------------------

            XmlNode newViaEvacuacion = doc.CreateNode(XmlNodeType.Element, "ViaEvacuacion", null);
            XmlNode newViaEvacuacionLatitud = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
            categoryText = viaEvacuacion.Latitude != 0 ? doc.CreateTextNode(viaEvacuacion.Latitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newViaEvacuacionLatitud.AppendChild(categoryText);

            XmlNode newViaEvacuacionLongitud = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
            categoryText = viaEvacuacion.Longitude != 0 ? doc.CreateTextNode(viaEvacuacion.Longitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newViaEvacuacionLongitud.AppendChild(categoryText);

            newViaEvacuacion.AppendChild(newViaEvacuacionLatitud);
            newViaEvacuacion.AppendChild(newViaEvacuacionLongitud);
            newEdificio.AppendChild(newViaEvacuacion);

            //-------------- Fin Via Evacuacion-------------------

            XmlNode newVertices = doc.CreateNode(XmlNodeType.Element, "Vertices", null);
            string latitud, longitud;
            for (int i = 0; i < coordenadas.Length; i++)
            {
                XmlNode newVertice = doc.CreateNode(XmlNodeType.Element, "Vertice", null);
                XmlNode newLatitud = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
                latitud = coordenadas[i].Latitude.ToString().Replace(",", ".");
                categoryText = doc.CreateTextNode(latitud);
                newLatitud.AppendChild(categoryText);
                newVertice.AppendChild(newLatitud);
                XmlNode newLongitud = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
                longitud = coordenadas[i].Longitude.ToString().Replace(",", ".");
                categoryText = doc.CreateTextNode(longitud);
                newLongitud.AppendChild(categoryText);
                newVertice.AppendChild(newLongitud);
                newVertices.AppendChild(newVertice);
            }
            newEdificio.AppendChild(newVertices);
            XmlNode tmpNode = doc.ImportNode(infoEmergencia,true);
            newEdificio.AppendChild(tmpNode);
            edificios.AppendChild(newEdificio);
            doc.Save(pathData);
        }


   
       public void escribirXML(string nombre, string direccion, string comuna, string altura, string pisos, string habitantes, Cartography.Desktop.LatLon[] coordenadas, Cartography.Desktop.LatLon centroide, 
            LatLon redSeca, LatLon redInerte, LatLon viaEvacuacion) 
        {
            XmlNode edificios = doc.SelectSingleNode("PointsOfInterest/Edificios");
            XmlNode newEdificio = doc.CreateNode(XmlNodeType.Element, "Edificio", null);
            XmlNode newNombre = doc.CreateNode(XmlNodeType.Element, "Nombre", null);
            XmlText categoryText = doc.CreateTextNode(nombre);
            newNombre.AppendChild(categoryText);
            newEdificio.AppendChild(newNombre);

            XmlNode newDireccion = doc.CreateNode(XmlNodeType.Element, "Direccion", null);
            categoryText = doc.CreateTextNode(direccion);
            newDireccion.AppendChild(categoryText);
            newEdificio.AppendChild(newDireccion);

            XmlNode newComuna = doc.CreateNode(XmlNodeType.Element, "Comuna", null);
            categoryText = doc.CreateTextNode(comuna);
            newComuna.AppendChild(categoryText);
            newEdificio.AppendChild(newComuna);

            XmlNode newAltura = doc.CreateNode(XmlNodeType.Element, "Altura", null);
            categoryText = doc.CreateTextNode(altura);
            newAltura.AppendChild(categoryText);
            newEdificio.AppendChild(newAltura);

            XmlNode newPisos = doc.CreateNode(XmlNodeType.Element, "Pisos", null);
            categoryText = doc.CreateTextNode(pisos);
            newPisos.AppendChild(categoryText);
            newEdificio.AppendChild(newPisos);

            XmlNode newHabitantes = doc.CreateNode(XmlNodeType.Element, "Habitantes", null);
            categoryText = doc.CreateTextNode(habitantes);
            newHabitantes.AppendChild(categoryText);
            newEdificio.AppendChild(newHabitantes);

            XmlNode newCentroide = doc.CreateNode(XmlNodeType.Element, "Centroide", null);
            XmlNode newLatitudCentroide = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
            categoryText = doc.CreateTextNode(centroide.Latitude.ToString().Replace(",","."));
            newLatitudCentroide.AppendChild(categoryText);
            newCentroide.AppendChild(newLatitudCentroide);

            XmlNode newLongitudCentroide = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
            categoryText = doc.CreateTextNode(centroide.Longitude.ToString().Replace(",", "."));
            newLongitudCentroide.AppendChild(categoryText);
            newCentroide.AppendChild(newLongitudCentroide);
            newEdificio.AppendChild(newCentroide);

            //-------------- Red Seca-------------------

            XmlNode newRedSeca = doc.CreateNode(XmlNodeType.Element, "RedSeca", null);
            XmlNode newRedSecaLatitud = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
            categoryText = redSeca.Latitude!=0 ? doc.CreateTextNode(redSeca.Latitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newRedSecaLatitud.AppendChild(categoryText);

            XmlNode newRedSecaLongitud = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
            categoryText = redSeca.Longitude != 0 ? doc.CreateTextNode(redSeca.Longitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newRedSecaLongitud.AppendChild(categoryText);

            newRedSeca.AppendChild(newRedSecaLatitud);
            newRedSeca.AppendChild(newRedSecaLongitud);
            newEdificio.AppendChild(newRedSeca);

            //-------------- Fin Red Seca-------------------

            //-------------- Red Inerte-------------------

            XmlNode newRedInerte = doc.CreateNode(XmlNodeType.Element, "RedInerte", null);
            XmlNode newRedInerteLatitud = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
            categoryText = redInerte.Latitude != 0 ? doc.CreateTextNode(redInerte.Latitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newRedInerteLatitud.AppendChild(categoryText);

            XmlNode newRedInerteLongitud = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
            categoryText = redInerte.Longitude != 0 ? doc.CreateTextNode(redInerte.Longitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newRedInerteLongitud.AppendChild(categoryText);

            newRedInerte.AppendChild(newRedInerteLatitud);
            newRedInerte.AppendChild(newRedInerteLongitud);
            newEdificio.AppendChild(newRedInerte);

            //-------------- Fin Red Inerte-------------------

            //-------------- Via Evacuacion-------------------

            XmlNode newViaEvacuacion = doc.CreateNode(XmlNodeType.Element, "ViaEvacuacion", null);
            XmlNode newViaEvacuacionLatitud = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
            categoryText = viaEvacuacion.Latitude != 0 ? doc.CreateTextNode(viaEvacuacion.Latitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newViaEvacuacionLatitud.AppendChild(categoryText);

            XmlNode newViaEvacuacionLongitud = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
            categoryText = viaEvacuacion.Longitude != 0 ? doc.CreateTextNode(viaEvacuacion.Longitude.ToString().Replace(",", ".")) : doc.CreateTextNode("");
            newViaEvacuacionLongitud.AppendChild(categoryText);

            newViaEvacuacion.AppendChild(newViaEvacuacionLatitud);
            newViaEvacuacion.AppendChild(newViaEvacuacionLongitud);
            newEdificio.AppendChild(newViaEvacuacion);

            //-------------- Fin Via Evacuacion-------------------

            XmlNode newVertices = doc.CreateNode(XmlNodeType.Element, "Vertices", null);
            string latitud, longitud;
            for (int i = 0; i < coordenadas.Length; i++)
            {
                XmlNode newVertice = doc.CreateNode(XmlNodeType.Element, "Vertice", null);
                XmlNode newLatitud = doc.CreateNode(XmlNodeType.Element, "Latitud", null);
                latitud = coordenadas[i].Latitude.ToString().Replace(",", ".");
                categoryText = doc.CreateTextNode(latitud);
                newLatitud.AppendChild(categoryText);
                newVertice.AppendChild(newLatitud);
                XmlNode newLongitud = doc.CreateNode(XmlNodeType.Element, "Longitud", null);
                longitud = coordenadas[i].Longitude.ToString().Replace(",", ".");
                categoryText = doc.CreateTextNode(longitud);
                newLongitud.AppendChild(categoryText);
                newVertice.AppendChild(newLongitud);
                newVertices.AppendChild(newVertice);
            }
            newEdificio.AppendChild(newVertices);
            edificios.AppendChild(newEdificio);
            doc.Save(pathData);
        }


    }
}
